package com.atguigu.gmall.order.service.api;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;

public interface OrderService {
    /**
     * 保存订单数据，其中包括订单详情数据
     * @param orderInfo
     * @return
     */
    Long saveOrder(OrderInfo orderInfo, ProcessStatus processStatus);

    /**
     * 执行订单关闭操作（方法内直接执行关闭，不做判断）
     * @param orderId
     */
    // 被通用方法取代，所以注释掉
    // void closeOrder(Long orderId);

    /**
     * 修改订单状态的通用方法
     * @param orderId 订单 id
     * @param processStatus 每一个 ProcessStatus 中都包含 OrderStatus
     */
    void updateOrderStatus(Long orderId, ProcessStatus processStatus);

    /**
     * 根据 orderId 获取 OrderInfo 对象。并且关联查询了订单详情的集合数据
     * @param orderId
     * @return
     */
    OrderInfo getOrderInfoById(Long orderId);

    /**
     * 通知库存系统核减库存
     * @param orderId
     */
    void notifyWareSystemToDeliver(Long orderId);

    /**
     * 执行拆单操作
     * @param orderId
     * @param wareSkuMap
     * @return
     */
    String doOrderSplit(Long orderId, String wareSkuMap);
}
